<?php
//上传文件调用
$file = $_FILES['image'];
$pass = $_POST['pass'];
$username = $_POST['username'];
//允许上传的类型
$allow = array('image/jpeg', 'image/png',  'image/jpg', 'image/gif');
$path = './uploads';
 
$maxsize = 1024 * 1024 * 0.5;
$result = upload($file, $allow, $error, $path, $maxsize, $username);
 
if ($result) {
	//上传成功
	echo "文件上传成功，新的文件名叫".$result;
}else{
	//上传失败
	echo $error;
}
 
/**
 *文件的上传
 *@param array $file 上传的文件的相关信息（是一个数组有五个元素）
 *@param array $allow 允许文件上传的类型
 *@param string & $error 引用传递，用来记录错误的信息
 *@param string $path 文件上传的目录,不带最后的 /
 *@param int $maxsize = 1024*1024 允许上传的文件大小
 *@return mixed false | $newname 如果上传失败返回false，成功返回文件的新名字
 **/
 
function upload($file, $allow, &$error, $path, $maxsize =1048576, $username){
	//先判断系统错误
	switch ($file['error']) {
		case 1:
			$error = '上传错误，超出了服务器文件限制的大小!';
			return false;
		
		case 2:
			$error = '上传错误，超出了浏览器表单允许的大小!';
			return false;
 
		case 3:
			$error = '上传错误，文件上传不完整!';
			return false;
 
		case 4:
			$error = '上传错误，请您先选择要上传的文件!';
			return false;
 
		case 6:
		case 7:
			$error = '对不起，服务器繁忙，请稍后再试!';
			return false;
	}
 
	//判断逻辑错误
	//验证文件的大小
	if ($file['size'] > $maxsize) {
		//超出用户了自己规定的大小
		$error = '上传错误，超出了文件限制的大小！';
		return false;
	}
	//判断文件的类型
	if (!in_array($file['type'], $allow)) {
		//非法的文件类型
		$error = '上传的文件的类型不正确，允许的类型有：'.implode(',', $allow);
		return false;
	}
 
	//移动临时文件
	//指定文件上传后保存的路径
	$newname = randName($file['name'], $username); //得到文件新的名字
	//判断$path 目录是否存在 不存在则创建
	if (!file_exists($path)) {
		mkdir($path, 0777, true);
	}
	$target = $path . '/' . $newname;
	$result = move_uploaded_file($file['tmp_name'],  $target);
	if ($result) {
		//上传成功
		return $newname;
	}else{
		//上传失败
		$error = '发生未知错误，上传失败';
		return false;
	}
}
 
/**
 *生成一个随机名字的函数 文件名=当前的时间 + 随机的几位数字
 *@param string $filename 文件的原始名字
 *@return string $newname 文件的新名字
 *
 */
function randName($filename, $username){
	//生成文件名的时间部分
	$newname =base64_encode(''.$username); //date('YmdHis');
	//加上随机的6位数
//	$str = '0123456789';
//	for ($i=0; $i < 6; $i++) { 
//		$newname .= $str[mt_rand(0, strlen($str)-1)];
//	}
	//加上文件的后缀名
	$newname .= strrchr($filename, '.');
	return $newname;
}
